package com.ruan.lkx.net;

import javafx.print.Printer;

import javax.print.attribute.standard.PrinterState;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.Buffer;
import java.util.Map;
import java.util.Set;

/**
 * @author: likaixin
 * @emial: 2638784520@qq.com
 * @desc: 该类用于封装提供网络请求的代码 用于发起网络请求 并将网络数据进行返回
 * @datetime: 2021-12-05 22:03
 */
public class HttpUtils {
    /*
    *该函数用于实现get请求,并将请求的结果进行返回
    * @param path 请求的资源路径
    * @return 请求的结果
     */
    public static String get(String path) {
        InputStream inputStream=null;
        InputStreamReader inputStreamReader=null;
        String line = "";//最开始空行
        String result = "";//每次读取到以后都要累计起来的读取结果
        BufferedReader reader=null;
        try {
            //Union Resource Location 统一资源定位
            URL url = new URL(path);
            URLConnection conn = url.openConnection();
            //进行连接
            conn.connect();
            inputStream = conn.getInputStream();
            //字符流:按行读
            inputStreamReader = new InputStreamReader(inputStream);
            reader = new BufferedReader(inputStreamReader);

//            while (line!=null){
//                reader.readLine();
//            }
            while ((line = reader.readLine()) != null) {
                result += line;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭文件读取 释放空间
            try {
                if (reader!=null){
                    reader.close();
                }
                if (inputStreamReader !=null){
                    inputStreamReader.close();
                }
                if (inputStreamReader!=null){
                    inputStream.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }


        }
    return result;
    }
    /*
    * 该方法用于实现发送一个post请求 并将请求的解析到返回
    * @param path 要请求的资源路径
    * @ header 请求头信息
    * data 请求体数据
    * @return 请求的响应结果
    *
    * */
    public static String post(String path,  Map<String,String> header,byte[] data){
        BufferedReader reader=null;//读取响应的结果
        String result=""; //最后的结果
        OutputStream outPut=null;
        try {
            URL url =new URL(path);
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");//设置为post请求
            conn.setDoInput(true); //允许从服务端接收数据
            conn.setDoOutput(true);//允许向服务端发送数据
            //设置请求头
            //ContentType:application/json
            //Authorization: "Basic "+base64(用户名+密码)
            //Property:属性
            if (!header.isEmpty()){//如果请求头不为空,则要将用户需要设置的属性
                //设置到请求头中
                Set<String> keys = header.keySet();
                for (String key : keys) {
                    String value = header.get(key);
                    //将拿到的key和value设置到请求头属性中
                    conn.setRequestProperty(key,value);
                }
            }
            //线连接
            conn.connect();
            //输出流
            outPut = conn.getOutputStream();
            //将请求的数据发送出去(发送到服务端)
            outPut.write(data);
            outPut.flush();

            //接受响应数据
            reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line=null;
            while ((line=reader.readLine())!=null){
                result+=line;
            }
        }catch (MalformedURLException e){
            e.printStackTrace();
        }catch ( IOException e){
            e.printStackTrace();
        }finally {
            try {
                if(reader!=null){
                    reader.close();
                }
                if (outPut!=null){
                    outPut.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        return result;
    }



}
